.TH MEMORY 3
.SH NAME
memccpy, memchr, memcmp, memcpy, memmove, memset \- memory operations
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.ta \w'\fLvoid* 'u
.B
void*	memccpy(void *s1, void *s2, int c, long n)
.PP
.B
void*	memchr(void *s, int c, long n)
.PP
.B
int	memcmp(void *s1, void *s2, long n)
.PP
.B
void*	memcpy(void *s1, void *s2, long n)
.PP
.B
void*	memmove(void *s1, void *s2, long n)
.PP
.B
void*	memset(void *s, int c, long n)
.SH DESCRIPTION
These functions operate efficiently on memory areas
(arrays of bytes bounded by a count, not terminated by a zero byte).
They do not check for the overflow of any receiving memory area.
.PP
.I Memccpy
copies bytes from memory area
.I s2
into
.IR s1 ,
stopping after the first occurrence of byte
.I c
has been copied, or after
.I n
bytes have been copied, whichever comes first.
It returns a pointer to the byte after
the copy of
.I c
in
.IR s1 ,
or zero if
.I c
was not found in the first
.I n
bytes of
.IR s2 .
.PP
.I Memchr
returns a pointer to the first
occurrence of byte
.I c
in the first
.I n
bytes of memory area
.IR s,
or zero if
.I c
does not occur.
.PP
.I Memcmp
compares its arguments, looking at the first
.I n
bytes only, and returns an integer
less than, equal to, or greater than 0,
according as
.I s1
is lexicographically less than, equal to, or
greater than
.IR s2 .
The comparison is bytewise unsigned.
.PP
.I Memcpy
copies
.I n
bytes from memory area 
.I s2
to
.IR s1 .
It returns
.IR s1 .
.PP
.I Memmove
works like
.IR memcpy ,
except that it is guaranteed to work if
.I s1
and
.IR s2
overlap.
.PP
.I Memset
sets the first
.I n
bytes in memory area
.I s
to the value of byte
.IR c .
It returns
.IR s .
.SH SOURCE
All these routines have portable C implementations in
.BR \*9/src/lib9 .
.\" Most also have machine-dependent assembly language implementations in
.\" .BR \*9/lib9/$objtype .
.SH SEE ALSO
.IR strcat (3)
.SH BUGS
ANSI C does not require
.I memcpy
to handle overlapping source and destination; on Plan 9, it does, so
.I memmove
and
.I memcpy
behave identically.
.PP
If
.I memcpy
and
.I memmove
are handed a negative count, they abort.
